From cadf6a9d3c0214e2913b8f2e7d65c6f05bd63489 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 17 Feb 2015 16:11:38 +0100 Subject: [PATCH] cssnode: Add gtk_css_node_invalidate_style_provider() This function not just invalidates the current node, but also all children. --- gtk/gtkcssnode.c | 19 +++++++++++++++++++ gtk/gtkcssnodeprivate.h | 2 ++ gtk/gtkstylecontext.c | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c index d81f061a9e..3a317cd831 100644 --- a/gtk/gtkcssnode.c +++ b/gtk/gtkcssnode.c @@ -438,6 +438,9 @@ gtk_css_node_reposition (GtkCssNode *node, { gtk_css_node_parent_was_unset (node); } + + if (gtk_css_node_get_style_provider_or_null (node) == NULL) + gtk_css_node_invalidate_style_provider (node); } if (parent) @@ -736,6 +739,22 @@ gtk_css_node_get_declaration (GtkCssNode *cssnode) return cssnode->decl; } +void +gtk_css_node_invalidate_style_provider (GtkCssNode *cssnode) +{ + GtkCssNode *child; + + gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_SOURCE); + + for (child = cssnode->first_child; + child; + child = child->next_sibling) + { + if (gtk_css_node_get_style_provider_or_null (child) == NULL) + gtk_css_node_invalidate_style_provider (child); + } +} + void gtk_css_node_invalidate (GtkCssNode *cssnode, GtkCssChange change) diff --git a/gtk/gtkcssnodeprivate.h b/gtk/gtkcssnodeprivate.h index 8cfcd2a9c0..7403cd345f 100644 --- a/gtk/gtkcssnodeprivate.h +++ b/gtk/gtkcssnodeprivate.h @@ -139,6 +139,8 @@ void gtk_css_node_set_style (GtkCssNode * GtkCssStyle *style); GtkCssStyle * gtk_css_node_create_style (GtkCssNode *cssnode); +void gtk_css_node_invalidate_style_provider + (GtkCssNode *cssnode); void gtk_css_node_invalidate (GtkCssNode *cssnode, GtkCssChange change); void gtk_css_node_validate (GtkCssNode *cssnode, diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index 2b9f490f6f..33e56ee58b 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -289,7 +289,7 @@ static void gtk_style_context_cascade_changed (GtkStyleCascade *cascade, GtkStyleContext *context) { - gtk_css_node_invalidate (gtk_style_context_get_root (context), GTK_CSS_CHANGE_SOURCE); + gtk_css_node_invalidate_style_provider (gtk_style_context_get_root (context)); } static void -- 2.30.2